一般正常我們在Laravel Debug 時都會用
dd()
或是 var_dump()
方法來進行 Debug
查看目前的變數裡面到底存什麼
當然這個方法非常直覺,想要看什麼,直接把那個變數帶進去就知道了
但當程式越來越複雜,你得把一個個商業邏輯都是抽得乾乾淨淨。可能你每次跑一個Controller Action 都要跑超過三四隻 php 檔,可能是 Service、Repository 檔案。
這時候你很容易忘記把 dd()
或是 var_dump()
加在哪裡。或是每次Debug都要,加dd()
、刪dd()
、加dd()
、刪dd()
、加dd()
、刪dd()
,一直重複寫這些code。
如果你有以上困擾,建議你開始使用 Xdebug。
首先先在你主機的php加上Xdebug,如果你是用 MAMP PRO 來開發的話,在 PHP 的標籤就可以直接打勾起來使用Xdebug了。
如果不是的話建議使用 Homebrew 來安裝。
brew install php<version number>-xdebug
例如我是 PHP 7.0版,就輸入
brew install php70-xdebug
全部安裝好後,輸入一下
php -v
看以下有沒有下面類似的字
with Xdebug v2.4.0RC2, Copyright (c) 2002-2015, by Derick Rethans
如果有就是安裝好了
*小提醒:在使用 Composer 功能前(例如 composer update 、 composer install)輸入
php --ini
,找到目前吃到的 php.ini 檔,將下面這行前面加上;
,把它註解掉,這樣 Composer 才不會跑太久~zend_extension="/.../xdebug.so"
當然比較方便的做法是跑 composer 跟跑你專案的 php 是不一樣一個,像是你在 Homebrew 上裝 Xdebug,然後用 Mac 上原生 php 用來跑 Composer;或是你下載 MAMP 並在上面裝 Xdebug,然後一樣用 Mac 上原生 php 用來跑 Composer。注意兩個php版本盡量一致。
安裝好後,你就可以透過 phpstorm 來 debug 了 ! 首先要先設定幾個東西
首先我們要來選定剛剛安裝好 Xdebug 的 PHP
先按快捷鍵 Cmd(Ctrl) + ,
,打開設定
在 Languages & Frameworks 裡面找一下 PHP,不用展開裡面的內容,直接點一下,旁邊就會出現
按一下 intepreter 右邊的那個 ...
的按鈕
進去後,將你可以執行的 php 的路徑貼在 PHP executable 那欄裡。
如果不知道你的PHP 在哪,可以在 Terminal 輸入
which php
如果加入了php 路徑,但phpstorm 還是沒有找到你有 Xdebug。 那代表你沒有正確安裝 Xdebug 可以輸入
php -v
去檢查,或是輸入
php --ini
去檢查那隻 loaded 的 ini 檔,裡面有沒有下面的設定
zend_extension=xdebug.so xdebug.remote_enable=1 xdebug.remote_connect_back = 1 xdebug.remote_port = 9000
接下來打開你的 phpstorm,在上面個工具列找到 Run
下面的 Edit Configurations
打開後,按最左上角的 + ,然後滑到最下面選擇 PHP Web Application
按完後,你會看到設定檔裡 Server 裡面什麼都沒有
這時候按 Server 那下拉式的選單旁邊的那個 ... 按紐,就會再開啟一個視窗
進去後一樣按左上角的 + ,再進一步去設定你的 Server 名稱
跟他的 ip,如果他架在 localhost 的話,Host 那個欄位就打 localhost
接著再按下面的 Apply 跟 OK 鍵,視窗就會自己關掉,並回到剛剛設定的地方。
這邊的 Start Url 是指每次打開網頁的啟示頁,通常是直接設定首頁,你再重首頁導去你要去的地方,但如果你現在只要測其中一頁的邏輯,你可以直接把連結改成你要測的地方。
接著再按下面的 Apply 跟 OK 鍵,視窗就會自己關掉,這樣就完成了。
要開始 Debug 時,只要到工具列選 Run
然後再點 Debug...
選你剛剛創建的 Configuration
接下來你只要在 程式最左側的地方點一下,就會有個紅點點
接下來只要執行到這裡的邏輯時,頁面就會停住,回到phpstorm 上,下方就會出現所有有關的debug 資訊。
注意:執行測試後,瀏覽器會自動打開測試頁面,但他會在後面加上
XDEBUG_SESSION_START
為開頭的參數,如果這個後面的號碼跟 phpstorm 上面的不一樣,他就不會執行 XDebug。
參考資源: